{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-22T07:40:12.584052Z",
     "start_time": "2021-02-22T07:40:10.882862Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Using TensorFlow backend.\n"
     ]
    }
   ],
   "source": [
    "from keras.datasets import reuters\n",
    "import numpy as np\n",
    "from keras import models\n",
    "from keras import layers\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-22T07:40:13.280447Z",
     "start_time": "2021-02-22T07:40:12.585695Z"
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/rex/anaconda3/envs/py37/lib/python3.7/site-packages/keras/datasets/reuters.py:85: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray\n",
      "  x_train, y_train = np.array(xs[:idx]), np.array(labels[:idx])\n",
      "/Users/rex/anaconda3/envs/py37/lib/python3.7/site-packages/keras/datasets/reuters.py:86: VisibleDeprecationWarning: Creating an ndarray from ragged nested sequences (which is a list-or-tuple of lists-or-tuples-or ndarrays with different lengths or shapes) is deprecated. If you meant to do this, you must specify 'dtype=object' when creating the ndarray\n",
      "  x_test, y_test = np.array(xs[idx:]), np.array(labels[idx:])\n"
     ]
    }
   ],
   "source": [
    "(train_data, train_labels), (test_data, test_labels) = reuters.load_data(num_words=10000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-22T07:40:13.966733Z",
     "start_time": "2021-02-22T07:40:13.959884Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8982"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(train_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-22T07:40:15.619394Z",
     "start_time": "2021-02-22T07:40:15.615928Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2246"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(test_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-22T07:40:16.541187Z",
     "start_time": "2021-02-22T07:40:16.537085Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1,\n",
       " 245,\n",
       " 273,\n",
       " 207,\n",
       " 156,\n",
       " 53,\n",
       " 74,\n",
       " 160,\n",
       " 26,\n",
       " 14,\n",
       " 46,\n",
       " 296,\n",
       " 26,\n",
       " 39,\n",
       " 74,\n",
       " 2979,\n",
       " 3554,\n",
       " 14,\n",
       " 46,\n",
       " 4689,\n",
       " 4329,\n",
       " 86,\n",
       " 61,\n",
       " 3499,\n",
       " 4795,\n",
       " 14,\n",
       " 61,\n",
       " 451,\n",
       " 4329,\n",
       " 17,\n",
       " 12]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    " train_data[10]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-22T07:40:16.990472Z",
     "start_time": "2021-02-22T07:40:16.951558Z"
    }
   },
   "outputs": [],
   "source": [
    "word_index = reuters.get_word_index()\n",
    "reverse_word_index = dict([(value, key) for (key, value) in word_index.items()]) \n",
    "decoded_newswire = ' '.join([reverse_word_index.get(i - 3, '?') for i in train_data[0]])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-22T07:40:17.507408Z",
     "start_time": "2021-02-22T07:40:17.503678Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'? ? ? said as a result of its december acquisition of space co it expects earnings per share in 1987 of 1 15 to 1 30 dlrs per share up from 70 cts in 1986 the company said pretax net should rise to nine to 10 mln dlrs from six mln dlrs in 1986 and rental operation revenues to 19 to 22 mln dlrs from 12 5 mln dlrs it said cash flow per share this year should be 2 50 to three dlrs reuter 3'"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "decoded_newswire"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-22T07:40:18.108511Z",
     "start_time": "2021-02-22T07:40:18.104033Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "45"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "max(train_labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-22T07:40:18.658723Z",
     "start_time": "2021-02-22T07:40:18.655741Z"
    }
   },
   "outputs": [],
   "source": [
    "def vectorize_sequences(sequences, dimension=10000):\n",
    "    results = np.zeros((len(sequences), dimension))\n",
    "    for i, sequence in enumerate(sequences):\n",
    "        results[i, sequence] = 1\n",
    "    return results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-22T07:40:19.666527Z",
     "start_time": "2021-02-22T07:40:19.351656Z"
    }
   },
   "outputs": [],
   "source": [
    "x_train = vectorize_sequences(train_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-22T07:40:19.911047Z",
     "start_time": "2021-02-22T07:40:19.824837Z"
    }
   },
   "outputs": [],
   "source": [
    "x_test = vectorize_sequences(test_data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-22T07:40:20.258637Z",
     "start_time": "2021-02-22T07:40:20.255751Z"
    }
   },
   "outputs": [],
   "source": [
    "from keras.utils.np_utils import to_categorical"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-22T07:40:20.483707Z",
     "start_time": "2021-02-22T07:40:20.480109Z"
    }
   },
   "outputs": [],
   "source": [
    "one_hot_train_labels = to_categorical(train_labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-22T07:40:20.698549Z",
     "start_time": "2021-02-22T07:40:20.695553Z"
    }
   },
   "outputs": [],
   "source": [
    "one_hot_test_labels = to_categorical(test_labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-22T07:40:20.932569Z",
     "start_time": "2021-02-22T07:40:20.927853Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n",
       "       0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32)"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "one_hot_train_labels[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-22T07:40:21.587142Z",
     "start_time": "2021-02-22T07:40:21.583814Z"
    }
   },
   "outputs": [],
   "source": [
    "model = models.Sequential()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-22T07:40:22.169966Z",
     "start_time": "2021-02-22T07:40:22.056036Z"
    }
   },
   "outputs": [],
   "source": [
    "model.add(layers.Dense(64, activation='relu', input_shape=(10000,)))\n",
    "model.add(layers.Dense(64, activation='relu'))\n",
    "model.add(layers.Dense(46, activation='softmax'))\n",
    "model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-22T07:40:23.922035Z",
     "start_time": "2021-02-22T07:40:23.919775Z"
    }
   },
   "outputs": [],
   "source": [
    "x_val = x_train[:1000]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-22T07:40:24.106277Z",
     "start_time": "2021-02-22T07:40:24.103788Z"
    }
   },
   "outputs": [],
   "source": [
    "partial_x_train = x_train[1000:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-22T07:40:24.274905Z",
     "start_time": "2021-02-22T07:40:24.272198Z"
    }
   },
   "outputs": [],
   "source": [
    "y_val = one_hot_train_labels[:1000]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-22T07:40:24.442688Z",
     "start_time": "2021-02-22T07:40:24.439869Z"
    }
   },
   "outputs": [],
   "source": [
    "partial_y_train = one_hot_train_labels[1000:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "ExecuteTime": {
     "start_time": "2021-02-22T07:40:25.182Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Train on 7982 samples, validate on 1000 samples\n",
      "Epoch 1/20\n"
     ]
    }
   ],
   "source": [
    "history = model.fit(partial_x_train, partial_y_train, epochs=20, batch_size=512, validation_data=(x_val, y_val))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2021-02-22T07:40:01.981020Z",
     "start_time": "2021-02-22T07:40:01.883656Z"
    }
   },
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'history' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-1-b2dcc5d67f0d>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mhistory\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mhistory\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mkeys\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m: name 'history' is not defined"
     ]
    }
   ],
   "source": [
    "history.history.keys()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-12-03T13:20:35.128079Z",
     "start_time": "2020-12-03T13:20:34.918216Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "loss = history.history['loss'] \n",
    "val_loss = history.history['val_loss']\n",
    "epochs = range(1, len(loss) + 1)\n",
    "plt.plot(epochs, loss, 'bo', label='Training loss') \n",
    "plt.plot(epochs, val_loss, 'b', label='Validation loss') \n",
    "plt.title('Training and validation loss')\n",
    "plt.xlabel('Epochs')\n",
    "plt.ylabel('Loss')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-12-03T13:20:42.217154Z",
     "start_time": "2020-12-03T13:20:42.001173Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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+OCD2XHHHddIKO3atVs1/8EHH8zQoUPp06cPp5xyCrWPrnj44Yfp06cP+++/PxdccMGq9eaaOXMmBxxwAAMGDGDAgAFrJKSrr76avn370q9fPy699FIApk+fzqGHHkq/fv0YMGAAM2bMaNoPqh6NnlUVETOAL0tqR3p+x6LSh2Vmm6If/hAWL16zbPHiVH7KKU27rddee40nnniCli1bsnDhQsaNG0erVq144oknuPzyyxkzZsxay0ydOpWnnnqKRYsWseuuu3L22WevdQrriy++yOTJk9luu+3Yb7/9+Pvf/051dTXf+c53GDduHL1792bYsGF5Y9p22215/PHHadOmDa+//jrDhg2jpqaGv/71r4wdO5Z///vftG3blg8//BCAU045hUsvvZTjjz+eJUuWsHLlyrzrbWoFPQFQ0tHAHkCb2k6UiPhpCeMys03Q228XV74+TjzxRFq2bAnAggULOO2003j99deRxLJly/Iuc/TRR7P55puz+eabs+222/L+++/To0ePNeYZOHDgqrKqqipmzpxJu3bt2HHHHVed7jps2DBuuummtda/bNkyzjvvPCZOnEjLli157bXXAHjiiScYMWIEbdu2BaBTp04sWrSId999l+OPPx5I12JsKIXc5PBG4CTgfECk6zp6ljguM9sE7bBDceXrY8stt1w1/KMf/YivfOUrvPLKKzzwwAP1npq6+eabrxpu2bJl3v6RfPMU+qTVa6+9lq5duzJp0iRqampWdd5HxFpnPpXz6a2F9HEMiohvAR9FxH8B+wLblzYsM9sUXXklZD+qV2nbNpWX0oIFC+jevTsAt912W5Ovv0+fPrzxxhvMnDkTgD/96U/1xtGtWzdatGjBnXfeyYoVKwA4/PDDueWWW1icteN9+OGHbLXVVvTo0YOxY8cCsHTp0lXTS62QxFGbehdL2g5YBhR2eaGZWRFOOQVuugl69gQpvd90U9P3b9T1gx/8gMsuu4z99ttv1cG6KW2xxRb89re/5cgjj2T//fena9eubL311mvNd84553D77bfz5S9/mddee21VrejII4/k2GOPpbq6mqqqKq655hoA7rzzTn7zm9+w1157MWjQIN57770mjz0fNVbdkfQj0v2oDgGuBwK4OSJ+XPrwmkZ1dXXU1NSUOwyzTdKrr77Kbrv5iQyffPIJ7dq1IyI499xz2XnnnbnooovKHdYq+f5OksZHRHXdeRuscWQPcHoyIj6OiDGkvo0+hSYNSUdKmiZpuqRL80zfWtIDkiZJmixpRFa+q6SJOa+Fki7Mpl0h6d2caUcVEouZWTndfPPNVFVVsccee7BgwQK+853KvaqhwbOqImKlpF+Q+jWIiKXA0kJWLKklqYZyGDALeEHS/RExJWe2c4EpEfF1SV2AaZJGRcQ0oCpnPe8C9+Usd21EXFPQHpqZNQMXXXRRs6phrI9C+jgekzRExd9sZiAwPSLeyG5TMhoYXGeeANpn624HfAjUPU3hEGBGRLxV5PbNzKwECkkcF5Nuarg0azJaJGlhAct1B97JGZ+VleW6DtgNmA28DHw3IupewXIy8Mc6ZedJeknSLZI65tt49pTCGkk1c+fOLSBcMzMrRCGPjm0fES0ionVEbJWNb1XAuvPVUOr2xB8BTAS2IzVNXSdp1boltQaOZc278d5AeqhUFTAH+EU9cd8UEdURUd2lS5cCwjUzs0IU8gTAA/OV132wUx6zWPN6jx6kmkWuEcBVkU7tmi7pTaAPq5//8TVgQkS8n7PdVcOSbgYebGwfzMys6RTSVPX9nNePgAeAKwpY7gVgZ0m9s5rDycD9deZ5m9SHgaSuwK7AGznTh1GnmUpSt5zR44FXCojFzDZRBx98MI8++ugaZb/61a8455xzGlym9hT+o446io8//nitea644opV11PUZ+zYsUyZsvp8oB//+Mc88cQTxYTfLBXSVPX1nNdhwJ7A+wUstxw4D3iU9GzyuyNisqSzJJ2VzfYzYJCkl4EngUsiYh5A9kzzw4B766z6akkvS3oJ+AqwcZymYGYlMWzYMEaPHr1G2ejRo+u90WBdDz/8MB06dFinbddNHD/96U859NBD12ldzUkhNY66ZpGSR6Mi4uGI2CUidoqIK7OyGyPixmx4dkQcHhF9I2LPiLgrZ9nFEdE5IhbUWeep2fx7RcSxETFnHfbBzDYRQ4cO5cEHH2Tp0nQlwcyZM5k9ezb7778/Z599NtXV1eyxxx785Cc/ybt8r169mDcvPYLoyiuvZNddd+XQQw9ddet1SNdofOlLX6Jfv34MGTKExYsX849//IP777+f73//+1RVVTFjxgyGDx/OPffcA8CTTz5J//796du3L6effvqq+Hr16sVPfvITBgwYQN++fZk6depaMZX79uuF9HH8X1Z3arcgdUpPWq+tmtkm6cILYeLEpl1nVRX86lf1T+/cuTMDBw7kkUceYfDgwYwePZqTTjoJSVx55ZV06tSJFStWcMghh/DSSy+x11575V3P+PHjGT16NC+++CLLly9nwIAB7L333gCccMIJnHnmmQD853/+J7///e85//zzOfbYYznmmGMYOnToGutasmQJw4cP58knn2SXXXbhW9/6FjfccAMXXnghANtssw0TJkzgt7/9Lddccw2/+93v1li+3LdfL6TGUQOMz17/JDUnfXO9tmpmtgHlNlflNlPdfffdDBgwgP79+zN58uQ1mpXqevbZZzn++ONp27YtW221Fcceu+rBqLzyyisccMAB9O3bl1GjRjF58uQG45k2bRq9e/dml112AeC0005j3LjV5xudcMIJAOy9996rboyYa9myZZx55pn07duXE088cVXchd5+vW3dO0kWqZDncdwDLImIFZCu5JbUNiI2zG0YzWyj0VDNoJSOO+44Lr74YiZMmMBnn33GgAEDePPNN7nmmmt44YUX6NixI8OHD6/3duq16rsOevjw4YwdO5Z+/fpx22238fTTTze4nsbuEVh7a/b6bt2ee/v1lStXrnoWx4a6/XohNY4ngS1yxrcAKv+0ADPbZLRr146DDz6Y008/fVVtY+HChWy55ZZsvfXWvP/++/z1r39tcB0HHngg9913H5999hmLFi3igQceWDVt0aJFdOvWjWXLljEq5zm37du3Z9GitR+a2qdPH2bOnMn06dOBdJfbgw46qOD9Kfft1wtJHG0i4pPakWx4/eo5ZmYb2LBhw5g0aRInn3wyAP369aN///7ssccenH766ey3334NLj9gwABOOukkqqqqGDJkCAcccMCqaT/72c/YZ599OOyww+jTp8+q8pNPPpmf//zn9O/ff40O6TZt2nDrrbdy4okn0rdvX1q0aMFZZ51Focp9+/VCbqv+d+D8iJiQje8NXBcR+67Xljcg31bdrHx8W/XKUMxt1Qvp47gQ+LOk2qu+u5EeJWtmZpugRhNHRLwgqQ/pqm4BUyMi/5Pczcxso9doH4ekc4EtI+KViHgZaCep/mv1zcxso1ZI5/iZEbHqRi0R8RFwZulCMrONTSlOCbWmU+zfp5DE0SL3IU7ZE/laFxmXmW2i2rRpw/z58508mqmIYP78+auuBSlE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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.clf()\n",
    "acc = history.history['accuracy']\n",
    "val_acc = history.history['val_accuracy']\n",
    "plt.plot(epochs, acc, 'bo', label='Training acc') \n",
    "plt.plot(epochs, val_acc, 'b', label='Validation acc') \n",
    "plt.title('Training and validation accuracy') \n",
    "plt.xlabel('Epochs')\n",
    "plt.ylabel('Accuracy') \n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-12-03T13:21:05.730626Z",
     "start_time": "2020-12-03T13:21:05.415739Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2246/2246 [==============================] - 0s 138us/step\n"
     ]
    }
   ],
   "source": [
    "results = model.evaluate(x_test, one_hot_test_labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-12-03T13:21:08.158970Z",
     "start_time": "2020-12-03T13:21:08.152635Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1.4083046242262993, 0.777827262878418]"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-12-03T13:21:50.364059Z",
     "start_time": "2020-12-03T13:21:50.130027Z"
    }
   },
   "outputs": [],
   "source": [
    "predictions = model.predict(x_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-12-03T13:21:58.773124Z",
     "start_time": "2020-12-03T13:21:58.767234Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(46,)"
      ]
     },
     "execution_count": 52,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "predictions[0].shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-12-03T13:22:12.306584Z",
     "start_time": "2020-12-03T13:22:12.300101Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.0"
      ]
     },
     "execution_count": 53,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sum(predictions[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2020-12-03T13:22:23.944683Z",
     "start_time": "2020-12-03T13:22:23.937739Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.argmax(predictions[0])"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.9"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
